perm filename GEOMES.HDR[GEO,BGB] blob sn#086509 filedate 1974-02-13 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		REQUIRE "GEMSUB.REL"	LOAD_MODULE
C00009 00003	COMMENT EXTERNAL DECLARATIONS FOR DISPLAY ROUTINES
C00011 00004	COMMENT GEM-NODE NAMES FOR LINKS AND DATA
C00015 ENDMK
C⊗;
	REQUIRE "GEMSUB.REL"	LOAD_MODULE;

	REQUIRE "GEOMED.REL"	LOAD_MODULE;
	REQUIRE "IO.REL"	LOAD_MODULE;

	REQUIRE "WINGS.REL"	LOAD_MODULE;
	REQUIRE "EULER.REL"	LOAD_MODULE;
	REQUIRE "EUCLID.REL"	LOAD_MODULE;

	REQUIRE "VIEWER.REL"	LOAD_MODULE;

COMMENT BASIC GEOMED, IO AND DISPLAY;

	EXTERNAL SIMPLE PROCEDURE GEONIT;
	EXTERNAL SIMPLE PROCEDURE GEOMED;
	EXTERNAL SIMPLE PROCEDURE GEODPY;
	EXTERNAL SIMPLE PROCEDURE SHOW1(INTEGER WINDOW,GLASS);

	EXTERNAL SIMPLE INTEGER PROCEDURE IGEM(STRING FILNAM);
	EXTERNAL SIMPLE INTEGER PROCEDURE ICAM(STRING FILNAM);
	EXTERNAL SIMPLE INTEGER PROCEDURE OGEM(STRING FILNAM;INTEGER B);

COMMENT ARITH;
	EXTERNAL SIMPLE REAL PROCEDURE SQRT (REAL X);
	EXTERNAL SIMPLE REAL PROCEDURE SIN  (REAL X);
	EXTERNAL SIMPLE REAL PROCEDURE COS  (REAL X);
	EXTERNAL SIMPLE REAL PROCEDURE ATAN2(REAL Y,X);


COMMENT EUCLID;

	EXTERNAL SIMPLE INTEGER PROCEDURE TRANSLATE(INTEGER Q;REAL X,Y,Z);
	EXTERNAL SIMPLE INTEGER PROCEDURE ROTATE   (INTEGER Q;REAL X,Y,Z);
	EXTERNAL SIMPLE INTEGER PROCEDURE SHRINK   (INTEGER Q;REAL X,Y,Z);

	EXTERNAL SIMPLE INTEGER PROCEDURE APTRAN(INTEGER Q,ET);
	EXTERNAL SIMPLE INTEGER PROCEDURE INTRAN(INTEGER ET);
	EXTERNAL SIMPLE  REAL   PROCEDURE DISTAN(INTEGER Q1,Q2);

COMMENT WINGED EDGE PRIMITIVES;

	EXTERNAL SIMPLE INTEGER PROCEDURE MKNODE(INTEGER TYP);
	EXTERNAL SIMPLE INTEGER PROCEDURE KLNODE(INTEGER NOD);

	EXTERNAL SIMPLE INTEGER PROCEDURE MKUNIV;
	EXTERNAL SIMPLE INTEGER PROCEDURE MKWORLD;
	EXTERNAL SIMPLE INTEGER PROCEDURE MKCAMERA(INTEGER WORLD);
	EXTERNAL SIMPLE INTEGER PROCEDURE MKWINDOW(INTEGER CAMERA,WINDOW);

	EXTERNAL SIMPLE INTEGER PROCEDURE MKB(INTEGER WORLD);
	EXTERNAL SIMPLE INTEGER PROCEDURE KLB(INTEGER BNEW);
	EXTERNAL SIMPLE INTEGER PROCEDURE KLBFEV(INTEGER BNEW);

	EXTERNAL SIMPLE INTEGER PROCEDURE MKF(INTEGER FNEW);
	EXTERNAL SIMPLE INTEGER PROCEDURE MKE(INTEGER ENEW);
	EXTERNAL SIMPLE INTEGER PROCEDURE MKV(INTEGER VNEW);

	EXTERNAL SIMPLE INTEGER PROCEDURE KLF(INTEGER FNEW);
	EXTERNAL SIMPLE INTEGER PROCEDURE KLE(INTEGER ENEW);
	EXTERNAL SIMPLE INTEGER PROCEDURE KLV(INTEGER VNEW);

	EXTERNAL SIMPLE INTEGER PROCEDURE WING(INTEGER E1,E2);
	EXTERNAL SIMPLE INTEGER PROCEDURE LINKED(INTEGER Q1,Q2);

	EXTERNAL SIMPLE INTEGER PROCEDURE ECW(INTEGER Q1,Q2);
	EXTERNAL SIMPLE INTEGER PROCEDURE ECCW(INTEGER Q1,Q2);
	EXTERNAL SIMPLE INTEGER PROCEDURE OTHER(INTEGER Q1,Q2);

	EXTERNAL SIMPLE INTEGER PROCEDURE VCW(INTEGER E,F);
	EXTERNAL SIMPLE INTEGER PROCEDURE VCCW(INTEGER E,F);
	EXTERNAL SIMPLE INTEGER PROCEDURE FCW(INTEGER E,V);
	EXTERNAL SIMPLE INTEGER PROCEDURE FCCW(INTEGER E,V);

	EXTERNAL SIMPLE INTEGER PROCEDURE BGET(INTEGER Q);
	EXTERNAL SIMPLE INTEGER PROCEDURE BDET(INTEGER Q);
	EXTERNAL SIMPLE INTEGER PROCEDURE BATT(INTEGER Q1,Q2);

COMMENT EULER PRIMITIVES;

	EXTERNAL SIMPLE INTEGER PROCEDURE INVERT(INTEGER E);
	EXTERNAL SIMPLE INTEGER PROCEDURE EVERT(INTEGER B);

	EXTERNAL SIMPLE INTEGER PROCEDURE MKEV(INTEGER F,V);
	EXTERNAL SIMPLE INTEGER PROCEDURE MKFE(INTEGER V1,F,V2);
	EXTERNAL SIMPLE INTEGER PROCEDURE ESPLIT(INTEGER E);
	
	EXTERNAL SIMPLE INTEGER PROCEDURE KLFE(INTEGER E);
	EXTERNAL SIMPLE INTEGER PROCEDURE KLEV(INTEGER V);
	EXTERNAL SIMPLE INTEGER PROCEDURE KLVE(INTEGER E);

	EXTERNAL SIMPLE INTEGER PROCEDURE MKCOPY(INTEGER B);
	EXTERNAL SIMPLE INTEGER PROCEDURE GLUE(INTEGER F1,F2);
	EXTERNAL SIMPLE INTEGER PROCEDURE GLUEE(INTEGER F1,V1,F2,V2);

	EXTERNAL SIMPLE INTEGER PROCEDURE SWEEP(INTEGER F,FLG);
	EXTERNAL SIMPLE INTEGER PROCEDURE ROTCOM(INTEGER F);
	EXTERNAL SIMPLE INTEGER PROCEDURE PYRAMID(INTEGER FV);

	EXTERNAL SIMPLE INTEGER PROCEDURE REMOVF(INTEGER F);
	EXTERNAL SIMPLE INTEGER PROCEDURE FVDUAL(INTEGER B);

	EXTERNAL SIMPLE INTEGER PROCEDURE MKCUBE(REAL A,B,C);
	EXTERNAL SIMPLE INTEGER PROCEDURE MKCYLN(REAL R,N,Z);
	EXTERNAL SIMPLE INTEGER PROCEDURE MKBALL(REAL R,M,N);
COMMENT EXTERNAL DECLARATIONS FOR DISPLAY ROUTINES;

EXTERNAL SIMPLE PROCEDURE DPYSET(INTEGER ARRAY PTR);
EXTERNAL SIMPLE PROCEDURE DPYBIG(INTEGER SIZE);
EXTERNAL SIMPLE PROCEDURE DPYBRT(INTEGER SIZE);

EXTERNAL SIMPLE PROCEDURE AVECT(INTEGER X,Y);
EXTERNAL SIMPLE PROCEDURE AIVECT(INTEGER X,Y);
EXTERNAL SIMPLE PROCEDURE RVECT(INTEGER X,Y);
EXTERNAL SIMPLE PROCEDURE RIVECT(INTEGER X,Y);

EXTERNAL SIMPLE PROCEDURE DPYSST(STRING S);
EXTERNAL SIMPLE PROCEDURE DPYOUT(INTEGER POG);
EXTERNAL SIMPLE PROCEDURE DPYSTR(REFERENCE INTEGER TEXT);

EXTERNAL SIMPLE PROCEDURE DTYO(INTEGER BPTR);
EXTERNAL SIMPLE PROCEDURE OCTDPY(INTEGER X);
EXTERNAL SIMPLE PROCEDURE DECDPY(INTEGER X);
EXTERNAL SIMPLE PROCEDURE FLODPY(REAL X;INTEGER PLACES(4));

COMMENT GEM-NODE NAMES FOR LINKS AND DATA;

REQUIRE "⊂⊃⊂⊃" DELIMITERS;

COMMENT WORLD LOCUS;
	DEFINE XWC(V)=⊂MEMORY[V-3,REAL]⊃;
	DEFINE YWC(V)=⊂MEMORY[V-2,REAL]⊃;
	DEFINE ZWC(V)=⊂MEMORY[V-1,REAL]⊃;
	DEFINE AA(V)=⊂MEMORY[V-3,REAL]⊃;
	DEFINE BB(V)=⊂MEMORY[V-2,REAL]⊃;
	DEFINE CC(V)=⊂MEMORY[V-1,REAL]⊃;
	DEFINE TYP(V)=⊂MEMORY[V]⊃;
	DEFINE BBIT=⊂'1000000⊃;
COMMENT ROTATION MATRIX;
	DEFINE IX(V)=⊂MEMORY[V+0,REAL]⊃;
	DEFINE IY(V)=⊂MEMORY[V+1,REAL]⊃;
	DEFINE IZ(V)=⊂MEMORY[V+2,REAL]⊃;
	DEFINE JX(V)=⊂MEMORY[V+3,REAL]⊃;
	DEFINE JY(V)=⊂MEMORY[V+4,REAL]⊃;
	DEFINE JZ(V)=⊂MEMORY[V+5,REAL]⊃;
	DEFINE KX(V)=⊂MEMORY[V+6,REAL]⊃;
	DEFINE KY(V)=⊂MEMORY[V+7,REAL]⊃;
	DEFINE KZ(V)=⊂MEMORY[V+8,REAL]⊃;

COMMENT PERSPECTIVE-PROJECTED LOCUS;
	DEFINE XPP(V)=⊂MEMORY[V+4,REAL]⊃;
	DEFINE YPP(V)=⊂MEMORY[V+5,REAL]⊃;
	DEFINE ZPP(V)=⊂MEMORY[V+6,REAL]⊃;

COMMENT FACE, EDGE AND VERTEX RINGS;
	DEFINE H1(X)=⊂ (X LSH -18)⊃;
	DEFINE H2(X)=⊂ (X LAND '777777)⊃;
	DEFINE H2→(Y,X)=⊂ ((X LAND '777777000000)LOR(Y LAND '777777))⊃;
	DEFINE H1→(Y,X)=⊂ (((Y LAND '777777)LSH 18)LOR(X LAND '777777))⊃;
	DEFINE NFACE(E)=⊂H1(MEMORY[E+1])⊃;
	DEFINE PFACE(E)=⊂H2(MEMORY[E+1])⊃;
	DEFINE NED(E)=⊂H1(MEMORY[E+2])⊃;
	DEFINE PED(E)=⊂H2(MEMORY[E+2])⊃;
	DEFINE PED→(Y,E)=⊂MEMORY[E+2]←H2→(Y,MEMORY[E+2])⊃;
	DEFINE NVT(E)=⊂H1(MEMORY[E+3])⊃;
	DEFINE PVT(E)=⊂H2(MEMORY[E+3])⊃;

COMMENT PARTS' TREE LINKS;
	DEFINE DAD(B)=⊂H1(MEMORY[B+4])⊃;
	DEFINE SON(B)=⊂H2(MEMORY[B+4])⊃;
	DEFINE BRO(B)=⊂H1(MEMORY[B+5])⊃;
	DEFINE SIS(B)=⊂H2(MEMORY[B+5])⊃;

COMMENT MULTI PURPOSE LINKS;
	DEFINE ALT(B)=⊂H1(MEMORY[B+6])⊃;
	DEFINE ALT2(B)=⊂H2(MEMORY[B+6])⊃;
	DEFINE ALT→(Y,B)=⊂MEMORY[B+6]←H1→(Y,MEMORY[B+6])⊃;
	DEFINE ALT2→(Y,B)=⊂MEMORY[B+6]←H2→(Y,MEMORY[B+6])⊃;
	DEFINE FRAME(B)=⊂H2(MEMORY[B+6])⊃;
	DEFINE CW(B)=⊂H1(MEMORY[B+7])⊃;
	DEFINE CCW(B)=⊂H2(MEMORY[B+7])⊃;
	DEFINE CAR8(B)=⊂H1(MEMORY[B+8])⊃;
	DEFINE CDR8(B)=⊂H2(MEMORY[B+8])⊃;

REQUIRE UNSTACK_DELIMITERS;